package com.atguigu1.core.operator

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 *
 * @description: 缩减分区
 * @time: 2021-03-12 11:45
 * @author: baojinlong
 **/
object Spark15Coalesce {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("rdd")
    // 设置rdd分区数字
    val sparkContext = new SparkContext(conf)
    val rddValue: RDD[Int] = sparkContext.makeRDD(List(1, 2, 3, 4), 4)
    // coalesce方法默认情况下不会将分区的数据打乱重新组合,这种情况下的缩减分区可能会导致数据不均衡下划线数据倾斜
    // 如果想要数据均衡,可以进行shuffle处理
    val value: RDD[Int] = rddValue.coalesce(2)
    rddValue.repartition(5).collect.foreach(println)
    // 注意如果通过coalesce方式来增大分区则不会成功.如果想要实现分区效果则需要使用shuffle参数为true
    // 扩大分区一般使用repartition,底层使用coalesce函数shuffle为true
    value.saveAsTextFile("output")
    sparkContext.stop()
  }
}
